//入口文件,初始化一个基本的项目服务器
//导入express
const express = require('express');
//创建express服务器实例
const app = express();
// 引入body-Parser，解析json
const bodyParser = require('body-parser')
    //导入定于验证规则的包
    // 导入解析toekn中间件
const expressJwt = require('express-jwt')
const joi = require('joi')
    //解决跨域问题用cors
    //导入并配置cors中间件
const cors = require('cors')
    //将cors注册为全局中间件
app.use(cors());
// 静态资源托管
app.use('/tmp_uploads', express.static('tmp_uploads'))
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }))
    //配置解析表单数据的中间件，只能解析 application/x-www-form-urlencoded 格式的表单数据
    //解析Token的中间件
app.use(express.urlencoded({ extended: false }))
    //优化res.send()函数
    //响应数据中间件
app.use((req, res, next) => {
        res.ResData = function(err, status = 1, data = {}) {
            res.send({
                data,
                meta: {
                    status,
                    msg: err instanceof Error ? err.message : err
                }
            })
        }
        next()
    })
    //身份认证,以api开始请求的接口不需要token认证
    // app.use(expressJwt({ secret: 'secret ' }).unless({ path: [/^\/api\//] }))
    //     //定义错误中间件
    // app.use((err, req, res, next) => {
    //         //获取捕获信息
    //         if (err.name === 'UnauthorizedError')
    //             return res.ResData("身份认证失败")
    //     })
    //导入并注册用户路由模块
const userRouter = require('./router/user')
app.use('/api/private/v1', userRouter)

const menuRouter = require('./router/menu')
app.use('/api/private/v1', menuRouter)

const usersRouter = require('./router/users')
app.use('/api/private/v1', usersRouter)

const authorRouter = require('./router/authorization')
app.use('/api/private/v1', authorRouter)

const categoriesRouter = require('./router/categories')
app.use('/api/private/v1', categoriesRouter)

const uploadRouter = require('./router/upload')
app.use('/api/private/v1', uploadRouter)

const goodsRouter = require('./router/goods')
app.use('/api/private/v1', goodsRouter)

const repRouter = require('./router/reports')
app.use('/api/private/v1', repRouter)
    //调用listen方法，开启指定端口的一个web服务器
app.listen(8888, () => {
    console.log("服务器开启");
})